package com.nbst.comnutil;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalUnit;
import java.util.Date;
import java.util.Locale;

/**
 * @ClassName: DateTimeUtil
 * @Description: LocalDateTime时间处理
 * @author King
 * @date 2020年6月11日
 * 
 */
public class DateTimeUtil {



	/**
	 * 字符串LocalDateTime格式转LocalDateTime类型
	 *
	 * @return String
	 * @author King
	 * @date 2020年6月11日
	 */
	public static LocalDateTime StringToLocalDateTime(String formatStr) throws ParseException {
		LocalDateTime localDateTime = null;
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
		Date date = df.parse(formatStr);
		SimpleDateFormat df1 = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
		date = df1.parse(date.toString());
		Instant instant = date.toInstant();
		ZoneId zoneId = ZoneId.systemDefault();
		localDateTime = instant.atZone(zoneId).toLocalDateTime();
		return localDateTime;

	}

	/**
	 * 获取格式化后的时间
	 * 
	 * @return String
	 * @author King
	 * @date 2020年6月11日
	 */
	public static String DateTime2String() {
		String strDate = "";
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
		strDate = formatter.format(LocalDateTime.now());
		return strDate;

	}


	/**
	 * 获取计算后指定格式的时间
	 *
	 * @return String
	 * @author King
	 * @date 2020年6月11日
	 */
	public static String DateTime2StringYmd(String strDate,TemporalUnit unit,String val,String formatstr) {
		LocalDateTime now = null;
		if(ToolUtils.isEmpty(strDate)){
			now =LocalDateTime.now();
		}else{
			now = LocalDateTime.parse(strDate);
		}
		if(ToolUtils.isEmpty(formatstr)){
			formatstr = "yyyy-MM-dd HH:mm:ss";
		}
		
		if(!ToolUtils.isEmpty(val)){
			String strdate = val.replace(" ", "");
			char operation = strdate.charAt(0);
			try {
				Long number = Long.valueOf(strdate.substring(1));
				if(operation == '+'){
					now = now.plus(number, unit);
				} else if (operation == '-') {
					now = now.minus(number, unit);
				}
			} catch (Exception e) {
				System.out.println("转换数值出错，请检查传入参数");
			} finally {
				DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatstr);
				strDate = formatter.format(now);
			}
		}
		return strDate;
	}

	/**
	 * 获取指定格式化后的时间
	 * 
	 * @param formatStr
	 *            格式
	 * @return String
	 * @author King
	 * @date 2020年6月11日
	 */
	public static String DateTime2String(String formatStr) {
		String strDate = "";
		if (ToolUtils.isEmpty(formatStr)) {
			return strDate;
		}
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatStr);
		strDate = formatter.format(LocalDateTime.now());
		return strDate;

	}

	/**
	 * 获取指定日期指定格式的格式化后的时间
	 * 
	 * @param formatStr
	 *            格式
	 * @return String
	 * @author King
	 * @date 2020年6月11日
	 */
	public static String DateTime2String(String formatStr, LocalDateTime dateTime) {
		String strDate = "";
		if (ToolUtils.isEmpty(formatStr)) {
			return strDate;
		}
		if (dateTime == null) {
			return strDate;
		}
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern(formatStr);
		strDate = formatter.format(dateTime);
		return strDate;

	}
}
